perm filename GRAPH[L70,TES] blob sn#009948 filedate 1972-05-14 generic text, type T, neo UTF8
00100	DEFPROP(PARSE,T,?*FSUBR) ;
00200	DEFPROP(?&NN,T,SPECIAL) ; DEFPROP(?&READY,T,SPECIAL); DEFPROP(?&PPPN,T,SPECIAL);
00300	DEFPROP(?&PROB,T,SPECIAL) ; DEFPROP(?&LASTPROB,T,SPECIAL); DEFPROP(BLOCKS,T,SPECIAL);
00400	
00500	
00600	?&READY{NIL} ← '?*?*?* ;
00700	
00800	EXPR EDIT(FOO) ; BEGIN PRINTSTR("*****") ; RETURN NIL ; END ;
00900	
01000	EXPR CHOICE(?&NN) ;
01100	SELECT ?&I FROM ?&I:1 NEXT ?&I+1 UNLESS ?&I GREATERP ?&NN ;
01200	
01300	EXPR TRANSLATE() ;
01400		BEGIN
01500		?&LASTPROB{NIL} ← 5 ;
01600		BLOCKS{NIL} ← NIL ;
01700		?&PPPN{NIL} ← GETPPN() ;
01800		PRINTSTR("TRANSLATING FROM FILE: TOWER") ;
01900		PARSE(TOWER) ;
02000		TERPRI NIL ;
02100		PRINTSTR("YOU ARE ABOUT TO TYPE TO MLISP2, E.G.:   PROBLEM(1);") ;
02200		PARSE() ;
02300		END ;
02400	
02500	EXPR PROBLEM(?&N) ;
02600	BEGIN
02700	IF ¬'TOWER.EXPR ∧ ¬'TOWER.FEXPR ∧ ¬'TOWER.SUBR ∧ ¬'TOWER.FSUBR THEN
02800		PRINTSTR("YOU FORGOT TO TYPE (TRANSLATE)") ALSO RETURN NIL ;
02900	IF ?&N LESSP 1 OR ?&N GREATERP ?&LASTPROB THEN
03000		PRINTSTR("ONLY " CAT ?&LASTPROB CAT " PROBLEMS!") ALSO RETURN ?&READY ;
03100	?&PROB{NIL} ← ?&N CONS CASE ?&N OF
03200		BEGIN
03300		'((1 2 4) (2) (3) (5) (7) (11) (2 5) (2 3)) ;
03400		'((2 5 8) (3) (7) (8) (13) (14) (15) (5 10) (2 10)) ;
03500		'((2 2 3 8 5) (4) (11) (7) (4 11) (11 7) (7 11)) ;
03600		'((2 3 1 10 4 3 2) (13) (22) (9 6) (14 9)) ;
03700		'((15 14 2 5 8 11 14) (2) (19) (17) (1) (67) (54 10) (30 10) (10 30)) ;
03800		END ;
03900	'?&ISPROB.?&ISPROB{NIL} ← 'T ;
04000	PRINC("THESE ARE THE BLOCKS YOU HAVE:") ; TERPRI NIL ;
04100	BLOCKS{NIL} ← PRINT CADR ?&PROB ;
04200	RETURN ?&READY ;
04300	END ;
04400	
04500	FEXPR TEST(?&K) ;
04600	BEGIN
04700	NEW ?&HEIGHTSLIST, ?&HEIGHTS, ?&GRADE, ?&CCC, ?&ANS ;
04800	IF ¬'?&ISPROB.?&ISPROB THEN
04900		PRINTSTR("YOU FORGOT TO SAY PROBLEM(1);") ALSO RETURN NIL ;
05000	?&HEIGHTSLIST ←
05100	IF LENGTH(?&K) GREATERP 2 THEN PRINTSTR("TEST HAS 0, 1, OR 2 ARGUMENTS!")
05200		ALSO NIL
05300	ELSE CASE LENGTH(?&K) + 1 OF
05400		BEGIN
05500		CDDR ?&PROB ;
05600		IF ¬NUMBERP(CAR ?&K) THEN PRINTSTR("NON-NUMERIC ARGUMENT TO TEST")
05700			ALSO NIL ELSE <?&K> ;
05800		IF ¬NUMBERP(CAR ?&K) OR ¬NUMBERP(CADR ?&K) THEN
05900			PRINTSTR("NON-NUMERIC ARGUMENT TO TEST") ALSO NIL ELSE <?&K> ;
06000		PRINTSTR("TEST CAN ONLY HAVE 0, 1, OR 2 ARGUMENTS") ;
06100		END ;
06200	?&GRADE ← CAR ?&PROB = ?&LASTPROB AND ¬?&K ;
06300	IF ?&GRADE THEN
06400	    IF 'TOWER.FEXPR ∨ 'FAILURE.FEXPR ∨ 'CHOICE.FEXPR THEN
06500			PRINTSTR("Please UNTRACE") ALSO RETURN NIL
06600	    ELSE
06700		BEGIN
06800		PRINTSTR("ANSWERS WILL NOT APPEAR ON THE TERMINAL.") ;
06900		EVAL(<'OUTC, <'OUTPUT, '?&CH, '(4 HJE), ?&PPPN>>) ;
07000		INC(INPUT(DSK?:, TOWER)) ;
07100		WHILE ERRSET(TYO(TYI()),T) NEQ '?$EOF?$ DO NIL ;
07200		PRINT CADR ?&PROB ; TERPRI NIL ;
07300		END ;
07400	FOR ?&HEIGHTS IN ?&HEIGHTSLIST DO
07500		BEGIN
07600		?&CCC ← '(TOWER TWOTOWERS)[LENGTH(?&HEIGHTS)] CONS ?&HEIGHTS ;
07700		BLOCKS ← CADR ?&PROB ;
07800		PRIN1 ?&CCC ;
07900		IF ?&GRADE THEN GC() ;
08000		?&ANS ← CASE CHOICE(2) OF BEGIN EVAL ?&CCC ; 'FAILURE END ;
08100		IF ?&GRADE THEN OUTC('?&CH, NIL) ;
08200		PRINC("  =  ") ; PRIN1 ?&ANS ;
08300		TERPRI NIL ;
08400		FLUSH() ;
08500		END ;
08600	TERPRI NIL ;
08700	IF ?&GRADE THEN
08800		BEGIN
08900		OUTC(NIL, T) ;
09000		PRINTSTR("ANSWERS RECORDED FOR GRADER") ;
09100		END ;
09200	RETURN ?&READY ;
09300	END ;
09400	
09500	_EOF_